package com.llmcu.source.javase.objectoriented.internalclass;

import lombok.Data;

/**
 * 外部类
 *
 * @author liuling
 * @date 2024/10/5 16:37
 */
@Data
public class Outer {
    private String name;
    static private int age;

    public static void main(String[] args) {
        /**
         * 局部内部类
         */
        @Data
        class MethodInner{
            private String name;
        }

        // 静态成员内部类对象，在静态方法中创建
        StaticClassInner staticClassInner = new StaticClassInner();
        staticClassInner.setName("staticClassInner");
        System.out.println("静态成员内部类名称为："+staticClassInner.getName());

        // 成员内部类对象，在静态方法中创建
        Outer outer = new Outer();
        ClassInner classInner = outer.new ClassInner();
        classInner.setName("classInner");
        System.out.println("成员内部类名称为："+classInner.getName());


        System.out.println("成员内部类（在方法中创建）名称为："+outer.foo());

        // 局部内部类对象，在当前方法中创建
        MethodInner methodInner = new MethodInner();
        methodInner.setName("methodInner");
        System.out.println("局部内部类名称为："+methodInner.getName());

    }

    public String foo(){
        // 成员内部类对象，在非静态方法中创建
        ClassInner classInner = this.new ClassInner();
        classInner.setName("classInnerCreatedByFoo");
        return classInner.getName();
    }

    /**
     * 成员内部类
     */
    @Data
    class ClassInner{
        private String name;
    }
    /**
     *  静态成员内部类
     */
    @Data
    static class StaticClassInner{
        private String name;
    }
}
